01 数据类型
你写的每一行Python代码都在和数据打交道——数字用来计算、字符串用来处理文本、列表用来存储一组数据。这三种类型是Python最基础的数据类型,几乎无处不在。
一、数字
1.1 整数和浮点数
Python的数字有两种主要类型:int(整数)和float(浮点数)。
# 整数
>>> 2 + 2
4
>>> 50 - 5*6
20
>>> (50 - 5*6) / 4
5.0
# 除法总是返回浮点数
>>> 8 / 5
1.61.2 整除和取余
//做整除(丢弃小数部分),%取余数。
>>> 17 / 3 # 普通除法
5.666666666666667
>>> 17 // 3 # 整除
5
>>> 17 % 3 # 取余
21.3 幂运算
**计算幂次方。
>>> 5 ** 2 # 5的平方
25
>>> 2 ** 7 # 2的7次方
128注意运算符优先级:-3**2等于-9(即-(3**2)),不是9。要得到9需要用(-3)**2。
1.4 变量赋值
用=给变量赋值。
>>> width = 20
>>> height = 5 * 9
>>> width * height
900变量未定义就使用会报错:
>>> n
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined1.5 其他数字类型
Python还支持Decimal(精确小数)、Fraction(分数)和复数(3+5j)。
二、字符串
2.1 基本写法
字符串可以用单引号或双引号包裹,效果一样。
>>> 'spam eggs'
'spam eggs'
>>> "Paris rabbit"
'Paris rabbit'2.2 转义字符
字符串里的引号需要用\转义,或者换一种引号。
>>> 'doesn\'t'
"doesn't"
>>> "doesn't"
"doesn't"
>>> '"Yes," they said.'
'"Yes," they said.'2.3 特殊字符
\n表示换行,\t表示制表符。直接看字符串和用print()输出不一样:
>>> s = 'First line.\nSecond line.'
>>> s
'First line.\nSecond line.'
>>> print(s)
First line.
Second line.2.4 原始字符串
在引号前加r,反斜杠不会被当作转义字符:
>>> print('C:\this\name') # \t变成制表符
C: his
ame
>>> print(r'C:\this\name') # 原始字符串,原样输出
C:\this\name2.5 多行字符串
用三个引号可以写多行字符串:
>>> print("""\
... Usage: thingy [OPTIONS]
... -h Display this usage message
... -H hostname Hostname to connect to
... """)注意第一行的\是为了避免开头多一个空行。
2.6 字符串拼接和重复
>>> 3 * 'un' + 'ium'
'unununium'相邻的字符串字面量会自动拼接:
>>> 'Py' 'thon'
'Python'但这只对字面量有效,变量不行:
>>> prefix = 'Py'
>>> prefix 'thon' # 报错
SyntaxError: invalid syntax
>>> prefix + 'thon' # 用+号
'Python'2.7 索引和切片
字符串可以按位置取字符,第一个字符索引是0。
>>> word = 'Python'
>>> word[0] # 第一个字符
'P'
>>> word[5] # 最后一个字符
'n'
>>> word[-1] # 倒数第一个
'n'
>>> word[-2] # 倒数第二个
'o'切片取子字符串(左闭右开):
>>> word[0:2] # 索引0到2(不含2)
'Py'
>>> word[2:5] # 索引2到5(不含5)
'tho'
>>> word[:2] # 从开头到2
'Py'
>>> word[4:] # 从4到结尾
'on'
>>> word[-2:] # 倒数两个
'on'记住:切片的起始位置总是包含,结束位置总是不包含。s[:i] + s[i:]总是等于s。
2.8 字符串不可变
字符串创建后不能修改:
>>> word[0] = 'J'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment要修改只能创建新的:
>>> 'J' + word[1:]
'Jython'
>>> word[:2] + 'py'
'Pypy'2.9 len()函数
len()返回字符串长度:
>>> len('Python')
6
>>> len('supercalifragilisticexpialidocious')
34三、列表
3.1 创建列表
列表用方括号包裹,元素用逗号分隔:
>>> squares = [1, 4, 9, 16, 25]
>>> squares
[1, 4, 9, 16, 25]3.2 索引和切片
和字符串一样支持索引和切片:
>>> squares[0]
1
>>> squares[-1]
25
>>> squares[-3:]
[9, 16, 25]3.3 列表可变
和字符串不同,列表可以修改:
>>> cubes = [1, 8, 27, 65, 125]
>>> cubes[3] = 64 # 修改第4个元素
>>> cubes
[1, 8, 27, 64, 125]3.4 添加元素
用append()在末尾添加:
>>> cubes.append(216)
>>> cubes.append(7 ** 3)
>>> cubes
[1, 8, 27, 64, 125, 216, 343]3.5 赋值不复制数据
变量赋值只是绑定同一个对象,不是复制:
>>> rgb = ["Red", "Green", "Blue"]
>>> rgba = rgb
>>> rgba.append("Alph")
>>> rgb # rgb也变了
["Red", "Green", "Blue", "Alph"]要复制可以用切片:
>>> correct_rgba = rgba[:]
>>> correct_rgba[-1] = "Alpha"
>>> correct_rgba
["Red", "Green", "Blue", "Alpha"]
>>> rgba # 原来的不变
["Red", "Green", "Blue", "Alph"]3.6 切片赋值
列表的切片可以赋值,甚至改变列表长度:
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters[2:5] = ['C', 'D', 'E']
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> letters[2:5] = []
>>> letters
['a', 'b', 'f', 'g']
>>> letters[:] = [] # 清空列表
>>> letters
[]3.7 嵌套列表
列表可以包含其他列表:
>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'3.8 len()函数
len()也适用于列表:
>>> letters = ['a', 'b', 'c', 'd']
>>> len(letters)
4四、while循环
4.1 基本用法
while循环在条件为真时重复执行:
>>> a, b = 0, 1
>>> while a < 10:
... print(a)
... a, b = b, a+b
...
0
1
1
2
3
5
84.2 多重赋值
a, b = 0, 1是多重赋值,右边的表达式先全部计算,再同时赋值给左边的变量。
4.3 缩进
Python用缩进来表示代码块,同一个代码块的缩进必须一致。习惯用4个空格。
4.4 print()函数
print()输出内容,多个参数用逗号分隔,会自动加空格:
>>> i = 256*256
>>> print('The value of i is', i)
The value of i is 65536end参数可以改变结尾字符:
>>> a, b = 0, 1
>>> while a < 1000:
... print(a, end=',')
... a, b = b, a+b
...
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,五、总结
| 类型 | 特点 | 用途 |
|---|---|---|
int | 整数 | 计数、索引 |
float | 浮点数 | 精确计算 |
str | 字符串,不可变 | 文本处理 |
list | 列表,可变 | 存储一组数据 |
常用操作:
| 操作 | 说明 |
|---|---|
s[i] | 索引取值 |
s[i:j] | 切片 |
s + t | 拼接 |
s * n | 重复 |
len(s) | 长度 |
s.append(x) | 列表末尾添加 |
s[i] = x | 列表修改(字符串不行) |
这三种数据类型是Python的基础,后面学的所有内容都建立在它们之上。